{
    //generator基本定义
    // let tell=function* () {
    //     console.log('开始执行我喽');
    //     yield 'a';
    //     yield 'b';
    //     return 'c';
    // };
    //
    // function* lala() {
    //     let a=yield *tell();
    //     console.log(a);
    // }
    //
    // //第一次执行
    // let k=tell();

}

{

    // Generator与iterator
    // let obj={};
    // obj[Symbol.iterator]=function* () {
    //     yield '1';
    //     yield '2';
    //     yield '3';
    // };
    // for(let v of obj){
    //   console.log(v);
    // }

}

{
    //关于状态积
    // let state=async function () {
    //     //因为这个是无限循环
    //     //所以这三个状态也是无限循环的
    //     while (1){
    //         await 'a';
    //         await 'b';
    //         await 'c';
    //     }
    // };
    // let status=state();

}

{
    //关于Generator的抽奖逻辑
    // let draw=function (count) {
    //     //具体抽奖逻辑......
    //
    //     //这里输出剩余的次数,抽奖次数一般不能放到全局当中去
    //     //不然的话容易被修改
    //     console.log(`剩余${count}次`);
    // };
    //
    // //这对抽奖次数做限制,相当于条件判断
    // let residue=function* (count) {
    //     while (count>0){
    //         count--;
    //         yield draw(count);
    //     }
    // };
    //
    // //初始话一下数值
    // let start=residue(5);
    // let btn=document.createElement('button');
    // btn.id='start';
    // btn.textContent='抽奖';
    // document.body.appendChild(btn);
    // document.getElementById('start').addEventListener('click',function () {
    //     start.next();
    // },false)

}

{
    //长轮询

    //模拟ajax的过程
    let ajax = function* () {
        yield  new Promise((resolve, reject) => {
            setTimeout(function () {
                resolve({code: 1})   //这里的数据其实是从后端拿取的,这个只是模拟
            }, 2000)
        })
    };

    //轮询的过程
    let pull = function () {
        let generator = ajax();
        //这里返回的还是一个promise的实例(因为是迭代器,所以说返回的值是一个对象)
        let step = generator.next();
        step.value.then(function (d) {
            //从这里异步拿到数据
            if (d.code !== 0) {
                setTimeout(function () {
                    console.log('wait');
                    //重新进行查询
                    pull();
                }, 1000)

            } else {
                console.log(d);
            }
        });
    }

    pull();

}






















































